package com.bbx.demo.nio;

import lombok.extern.slf4j.Slf4j;

import java.nio.ByteBuffer;

/**
 * buffer调用slice() 进行切片后，相当于创建了一个新的buffer（slice）,slice 与原始Buffer 共享切片段内的数据，任何一方更改，另一方都能够看到
 */
@Slf4j
public class ByteBufferTest2 {

    public static void main(String[] args) {
        ByteBuffer buffer = ByteBuffer.allocate(10);
        //在Buffer 中写入数据
        for (int i = 0; i < buffer.capacity(); i++) {
            buffer.put((byte) i);
        }

        //设置position  和 limit
        buffer.limit(8);
        buffer.position(3);

        //对Buffer 进行切片
        ByteBuffer slice = buffer.slice();

        //对切片进行读写，验证 原有Buffer 是否会发生改变
        for (int i = 0; i < slice.capacity(); i++) {
            byte b = slice.get(i);
            b *= b;
            slice.put(b);
        }

        buffer.limit(buffer.capacity());
        buffer.position(0);
        while (buffer.hasRemaining()) {
            byte b = buffer.get();
            log.info("slice 更改后的Buffer[{}]", b);
        }


        //对原有Buffer 进行更改，验证切片是否会进行更改
        buffer.flip();
        buffer.put(4, (byte) 4);

        slice.flip();
        while (slice.hasRemaining()){
            byte b = slice.get();
            log.info("buffer  写后 slice 的值[{}]", b);
        }

    }


}
